在CentOS上进行TiDB编译分享 | 您所在的位置:网站首页 › tidb 使用场景 › 在CentOS上进行TiDB编译分享 |
这里对TiDB的编译过程中的几个小点进行分享。虽然理论上讲,从github上下载的源码解压后就能实现编译,但实际操作过程中,由于各种各样的原因,还是有可能出错,本文对实操过程中的几个问题及解决方案进行分享。 本文用的环境是CentOS 7.4 环境准备(1)golang编译环境 golang的编译环境,很多文章上都建议直接用yum安装,如下: yum install golang -y 这样是可以的,但是要注意所安装golang的版本,跟所配置的yum源有关,一般情况下,不是最新版本,作者采用该方法安装的go版本是1.15.14,该版本不能正常编译当前用”git clone https://github.com/pingcap/tidb.git”下载的TiDB版本,可以用于自行在github上下载解压的早期版本,如5.0。编译用用”git clone https://github.com/pingcap/tidb.git”下载的TiDB版本,需要golang版本1.16以上,可以从golang官网上下载,本文用的1.17如下: wget https://golang.google.cn/dl/go1.17.linux-amd64.tar.gz 然后直接解压放到待安装目录下: tar -zxf go1.17.linux-amd64.tar.gz -C /usr/local 接着配置golang环境变量(在.bashrc或者.bash_profile中)如下: export GOROOT=/usr/local/go export GOBIN=$GOROOT/bin export GOARCH=amd64 export GOOS=linux export GOPATH=/opt/tidb 其中,GOPATH中下面准备TiDB源码下载存放与编译的位置 (2)Rust编译环境 Rust编译环境直接用网上其它文章所述即可,从中找到相应平台的nightly版本: wget https://mirrors.ustc.edu.cn/rust-static/dist/rust-nightly-x86_64-unknown-linux-gnu.tar.gz && tar zxf rust-nightly-x86_64-unknown-linux-gnu.tar.gz cd rust-nightly-x86_64-unknown-linux-gnu ./install.sh 然后配置Rust环境变量(在.bashrc或者.bash_profile中)如下: export RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static export RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup 然后应用环境变量 . ~/.bashrc (3)硬盘空间 如果直接从github上clone TiDB、PD和TiKV进行编译,首先需要准备较大的磁盘空间,在编译过程中从github与google需要在线下载不少东西,最终总共需要占用约10GB以上的空间 代码下载先在上面设置的GOPATH下面,创建子目录: Mkdir -p src/github.com/pingcap/ 在此子目录下: 有两种方式 一是git clone: git clone https://github.com/pingcap/tidb.git git clone GitHub - tikv/pd: Placement driver for TiKV git clone https://github.com/pingcap/tikv.git 二是从github上选择,即自行下载适合的版本 编译(1)Tidb 简单来讲: cd tidb gmake 不过,有可能会遇到一些问题: 一是在main.go hang住很长时间不动,如下: 这很可能是github或者google连不通,如果可以试图设置GOPROXY来解决 export GOPROXY=https://goproxy.cn,direct 二是有时会出现: # command-line-arguments /usr/local/go/pkg/tool/linux_amd64/link: running gcc failed: exit status 1 /usr/bin/ld: /tmp/go-link-1164296440/000014.o: unrecognized relocation (0x2a) in section `.text' /usr/bin/ld: final link failed: Bad value collect2: error: ld returned 1 exit status
这是因为ld的版本过低,需要升级一下,可以通过 yum install binutils 有时可能是 /usr/local/go/pkg/tool/linux_amd64/link: running gcc failed: exit status 1 ....下的其它错,可以试下: yum install glibc-static.x86_64 -y 如果同学无法连接google,则需要在go.mub后面增加replace replace ( cloud.google.com/go => github.com/google/go-cloud v0.4.1-0.20181112030950-0b43d4400e53 go.uber.org/atomic => github.com/uber-go/atomic v1.3.3-0.20181018215023-8dc6146f7569 go.uber.org/multierr => github.com/uber-go/multierr v1.1.1-0.20180122172545-ddea229ff1df go.uber.org/zap => github.com/uber-go/zap v1.9.2-0.20180814183419-67bc79d13d15 golang.org/x/crypto => github.com/golang/crypto v0.0.0-20181106171534-e4dc69e5b2fd golang.org/x/lint => github.com/golang/lint v0.0.0-20181026193005-c67002cb31c3 golang.org/x/net => github.com/golang/net v0.0.0-20181108082009-03003ca0c849 golang.org/x/oauth2 => github.com/golang/oauth2 v0.0.0-20181106182150-f42d05182288 golang.org/x/sync => github.com/golang/sync v0.0.0-20181108010431-42b317875d0f golang.org/x/sys => github.com/golang/sys v0.0.0-20181107165924-66b7b1311ac8 golang.org/x/text => github.com/golang/text v0.3.1-0.20181030141323-6f44c5a2ea40 golang.org/x/time => github.com/golang/time v0.0.0-20181108054448-85acf8d2951c golang.org/x/tools => github.com/golang/tools v0.0.0-20181111003725-6d71ab8aade0 google.golang.org/api => github.com/google/google-api-go-client v0.0.0-20181108001712-cfbc873f6b93 google.golang.org/appengine => github.com/golang/appengine v1.3.1-0.20181031002003-4a4468ece617 google.golang.org/genproto => github.com/google/go-genproto v0.0.0-20181109154231-b5d43981345b google.golang.org/grpc => github.com/grpc/grpc-go v1.2.1-0.20181109233107-eb55fa50e6c9 honnef.co/go/tools => github.com/dominikh/go-tools v0.0.0-20180920025451-e3ad64cb4ed3 )如果v后面的版本显示不对,可以试着改成master (2)Pd cd pd gmake (3)Tikv cd tikv carge build 编译tikv的时间很长,另外,还有一个要特别注意的点: 目前编译git clone出来的新版本(2022年1月),需要GCC比较高的版本,CentOS7自带的4.8.5版本,在编译grcp(0.9.1)时会出现错误 所以需要自行升级gcc版本 |
CopyRight 2018-2019 实验室设备网 版权所有 |